package com.tjmc.nsia.core.handler;


import cn.dev33.satoken.exception.NotLoginException;
import com.tjmc.nsia.core.domain.AjaxResult;
import com.tjmc.nsia.core.exception.GlobalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 * @author Luc
 * @version 1.0
 * @date 2023-05-17 9:28
 */
@Order(99999)
@RestControllerAdvice
public class GlobalExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    public AjaxResult exceptionHandler(Exception e) {
        e.printStackTrace();
        return AjaxResult.error(e.getMessage());
    }

    @ExceptionHandler(GlobalException.class)
    public AjaxResult globalExceptionHandler(GlobalException e) {
        e.printStackTrace();
        logger.error(e.getClass().getName() + ": code=" + e.getCode() + ", message=" + e.getMessage());
        return AjaxResult.error(e.getMessage());
    }

//    @ExceptionHandler(SaTokenException.class)
//    static AjaxResult handlerSaTokenException(SaTokenException e) {
//        // 根据不同异常细分状态码返回不同的提示
//        if(e.getCode() == 30001) {
//            return AjaxResult.error("redirect 重定向 url 是一个无效地址");
//        }
//        if(e.getCode() == 30002) {
//            return AjaxResult.error("redirect 重定向 url 不在 allowUrl 允许的范围内");
//        }
//        if(e.getCode() == 30004) {
//            return AjaxResult.error("提供的 ticket 是无效的");
//        }
//        // 更多 code 码判断 ...
//
//        // 默认的提示
//        return AjaxResult.error(e.getMessage());
//    }

    @ExceptionHandler(NotLoginException.class)
    public AjaxResult handlerNotLoginException(NotLoginException e) {
        return AjaxResult.error(401, e.getMessage());
    }
}
